--继承

Object ={age =18};

function Object:new() --这里相当于为Object声明了一个自带Objcet参数的函数 函数名叫做new
    --声明本地对象
    local newObj ={}

   --self == Object表 把类自身的方法和属性设置为元表的__index元方法
    self.__index = self;

    --这样后子表设置元表之后 如果子表没有相关属性就会去元表找
    setmetatable(newObj,self)

 

    return newObj;
end

--继承 需要到封装的创建对象的方法

function Object:subClass(className)

    --从大G表创建键值对
    _G[className] = {}

    local subObj = _G[className]

    --设置元表
    setmetatable(subObj,self)
       --定向
    self.__index =self


end

--使用: 首先让Person继承Objcet
Object:subClass("Person")

--然后new一个Person对象
local p1 =Person:new()

print(p1.age) 

--调用链:p1(new方法里面的newObj) 
--> Person(newObj的元表 也是subClass方法的subObj) 
--> Object(subObj(也就是Person)的元表 获取Objcet的age )